#include <iostream>
using namespace std;

/*
    成员函数作为类的友元函数
        1.Person类定义一个公有方法,该方法可以访问任何一个人的支付宝信息
        2.跟普通函数作为友元函数写法区别
          区别1： friend void Person::showAliPay(AliPay &alipay);
        3.注意: 编译器是从上到下，从左到右检测代码语法
          知识点1: 前向引用声明
          知识点2：成员函数的源码可以写的外面
*/
class AliPay; // 前向声明 告诉编译器我有定义AliPay类
// 缺陷: 仅仅是跟编译器打个招呼，说有定义这个类，但是这个类里面具体有哪些成员，编译器还是不知道
class Person
{
public:
    Person(string name)
    {
        this->name = name;
    }

    void showAliPay(AliPay &alipay);

private:
    string name;
};

class AliPay
{
public:
    AliPay(string account, string passwd, double money)
    {
        this->account = account;
        this->passwd = passwd;
        this->money = money;
    }

    friend void Person::showAliPay(AliPay &alipay);

private:
    string account;
    string passwd;
    double money;
};

void Person::showAliPay(AliPay &alipay)
{
    cout << "name:" << name << endl;
    cout << "account:" << alipay.account << endl;
    cout << "passwd:" << alipay.passwd << endl;
    cout << "money:" << alipay.money << endl;
}

int main()
{
    AliPay alipay("123456", "123456", 1000);
    Person person("zhangsan");
    person.showAliPay(alipay);
}